home *** CD-ROM | disk | FTP | other *** search
/ Utilities Professional 1-1500 / Utilities Professional 1-1500 (1994)(WPD)[!].iso / 07511000 / var0859.dms / var0859.adf / RGS.doc < prev    next >
Text File  |  1989-08-10  |  40KB  |  816 lines

  1.  
  2.      Some spotty documentation for the RGS program Nov 28 1988
  3.  
  4.  
  5. Introduction:
  6.  
  7.    RGS is a sonic spectrum editor. It allows you to paint a sonogram using
  8. specialized 'brushes' and then synthesize the corresponding  audio
  9. waveform. It is an "evolved" version of my older program DRW/DRWj. The
  10. main added features in RGS are that there are now 256 levels of amplitude
  11. to choose from and the ability to synthesize while you are drawing in
  12. nearly real time, as well as increased user friendliness. How "real" the
  13. time is depends on the number of samples per pixel you choose...more on
  14. this later. Let's just say that it's like having a wall of 69120 sinewave
  15. generators, each with their own amplitude knob(0-255).  Note also that the
  16. samples created by real-time synthesis are  noisier than the results of
  17. the "Synth" mode. 
  18.  The version on this disk is a new version which is considerably more
  19. friendly than all the previous ones. More friendliness is added daily.
  20. Most of the improvements are :
  21.   the removal of the control comb after all these years...
  22.   the removal of the ill-concieved "flying window"
  23.   the reversion back to a low-res/non-interlaced screen.(speed reasons)
  24.   a set of (gasp) menus to replace the control comb functions..
  25.   cosmetic re-arrangement of the screen (still in progress)
  26.   ability to read old DRW, DRWJ and RGS screen formats.
  27.  
  28. Versions older than Sep 23 88 are "cloned" by me at home.(An ugly
  29. interlaced version was cloned many moons ago by Phil Burk). The JForth
  30. Cloner is a program which cuts all the unneeded JForth code out of a
  31. turnkeyed module. It performs a few other optimizations as well. The
  32. main difference is that instead of being 270K long, it is under 75K !
  33. You can definitely use this version on a 512K machine!!!
  34.  
  35.  The program presents you with a dark grey area where time is on the
  36. x-axis, frequency (actually phase increment) is on the y-axis and color
  37. represents the amplitude of the sinewave at that point in time and phase.
  38. RGS takes this  information and creates a digital sample which corresponds
  39. to the spectrum on the screen.  Sonograms may be loaded and stored, sound
  40. files may be analyzed into sonograms and resulting sounds may be saved as 
  41. IFF 8SVX files. It allows you to play the sound (both channels) with the
  42. mouse controlling frequency and stereo pan. There are two MIDI modes which
  43. send chords derived from the sonogram to MIDI sound generators  which,
  44. when  coupled with a properly constructed microtonal scale, may allow your
  45. synth to  talk or make other sampled noises (with very very low fidelity).
  46.  
  47. Caution:
  48. There is no 'UNDO'. Because it is written in Delta Research's JForth,
  49. certain operations are slower than they need to be (although I did my best
  50. with Synth and BandPass Modes and real-time synth). Filename handling may
  51. be unfriendly should you make a typo or two - I suggest you type NIL: if
  52. you can't find the right file. There are several other annoying things 
  53. that I won't mention.
  54.  
  55.   The Screen:
  56. The RGS screen is a low-res, non-interlaced 4-plane screen, (capable of 16
  57. colors). There is one window on the RGS screen, but occassionally I switch
  58. back to  Workbench's screen for data input. (this is being phased out..)
  59. RGS has several Modes, which are described below. Which mode RGS is in
  60. determines how the mouse movements and keystrokes etc. etc. are
  61. interpreted. The current Mode is displayed in the Title bar of the RGS
  62. screen.
  63.  
  64. At the top of the window is the Color Bar. In RGS amplitude is expressed
  65. as a color. Since there are 256 amplitudes but only 12 colors, the color
  66. bar groups several amplitudes into each color. You select which amplitude
  67. you  want to draw with by clicking on the color bar - the true amplitude
  68. value is written on the end of the bar. The mapping between color and
  69. amplitude can be  changed with the Zone mode (see below), and the screen
  70. is refreshed using the  new mapping with the NewScreen mode. There are two
  71. palettes I use for the Color bar: one has a radically different color for
  72. each block of amplitudes (since this makes it easy to distinguish
  73. transitions) and the other has a more-or less continuous shades-of-orange
  74. palette, which is easier on the eye (but less accurate for "understanding"
  75. the sound). You can swap from one to the other with the \ key (or the new
  76. Palette menuitem  in Process menu.)
  77.  
  78. The  interesting part of the screen is the 128 by 270 pixel drawing area. 
  79. The y-axis corresponds to phase (percieved as frequency) and the x-axis
  80. corresponds to time. The y-axis units are displayed as "samples per cycle"
  81. on the top of the drawing area. The reason that I don't show Hz or some 
  82. other standard measurement is that the sample that RGS generates can be
  83. played back at a great number of speeds, which makebuv"&    *2(wt" &(^(8"( 0 8*"kut< ub"$  !bt* (6 't8"t*+t < t"0't( "!it"82=t8"t0("*t:**"+t0"^ < t(8"0t$ &8*!t* (6 'kt<8"t* (6 't8" the number of color clocks (an
  84. internal timing unit) between output samples. The two numbers work
  85. together like this, for example:   To get a tone near 440Hz, 
  86.  
  87.  3579546 CC/sec/(440 cycles/sec*16 samples/cycle) = 508.458 cc/sample 
  88.  (with a line drawn on the 16.00 mark on the y-axis...)
  89.  
  90. so the period should be 508. This kind of calculation is largely
  91. irrelevant, since the period can be instantly changed with the mouse so
  92. as to retune the sound. Also contributing to the irrelevance factor is
  93. the whole purpose of RGS, which is to allow complicated sounds to be
  94. created without needing to know what the numbers are.
  95. Just in case, note that Middle C (523.3 Hz) is is 428. 
  96.  
  97.  The x-axis is also displayed on the top of the screen, expressed
  98. as the byte offset from the beginning of the sample.
  99.  
  100. If you are in Doodle mode, the drawing mode mnemonic comes after the
  101. x-axis location number. 
  102.  
  103. RGS actually has two drawing and sound areas: BufA and BufB. The one
  104. currently on the screen is noted after the drawing mnemonic.(Not seen 
  105. until you use buffer B). See 'Buffers' for more info. 
  106.  
  107.  
  108. To the side of the drawing area is a square box, which I call the Blob.
  109. The size of the blob can be changed by clicking in the Blob's box. The
  110. Blob is used as a brush or averaging area in the "doodle mode". 
  111.  
  112. Underneath the Blob is a phony prop gadget which provides some fairly
  113. constant numbers used in Doodle mode. Clicking in the box provides a
  114. number from 1 to 32 which is used in various ways.
  115.  
  116. Underneath the drawing area are a few lines of status information :
  117.  
  118. The Volume setting for the synthesis operations (changed with + and -
  119. keys).
  120.  The settings for time axis in samples per pixel (changed with the Reset
  121. and Bandpass Modes).
  122.  The state of the real-time synthesis (changed with the G key or menu
  123. item). This shows whether the real-time synthesis is on or off and what
  124. variant of it is in effect.
  125.  The state of the period lock toggle (~), which keeps the period constant
  126. for better control during a performance.
  127.  The State of the harmonic handle and the phase/time Locks.(up/down arrows
  128. and numeric pad).
  129.  The status of the MIDI modes (changed with F-keys). The meanings of this
  130. cryptic line are divulged in the section on MIDI. 
  131.  
  132.  
  133.   The MODES:
  134.  
  135. There are several states into which the program may be put: all of them
  136. are accessed via the keyboard buttons. The first letter of each mode puts
  137. you in the corresponding mode, and case is ignored. The modes are also
  138. available from Menus (the Mode menu, to be specific). When you enter the
  139. program, the Help window is displayed as an obnoxious gesture. When you
  140. hit the enter key, you will be in "Play" mode.
  141.  
  142.  
  143. The modes are:
  144.  
  145.  T)op D)oodle S)ynth P)lay R)eset  W)rite B)andpass I)input O)utput Q)uit
  146.  M)idi U)ltraMIDI Z)oneSet X)onedSynth N)ewscreen A)lternateBuffer
  147.  
  148. ( The syntax "F)oobar" dates from UCSD Pascal : it simply means you 
  149.   need only type the first letter if you don't want to use the menus.  )
  150.  
  151.  Help Key gives the screen size, current release Date
  152.           and my address and credits.
  153.  
  154. But wait.. there's more! The arrow keys and keypad buttons also are used
  155. under various modes. The MIDI modes use the "F" keys, Escape and Delete,
  156. and sprinkled about the board are a few more  flags and toggles.
  157.  
  158. P)lay mode may also be accessed via the space bar, which is handy for 
  159. stopping a lengthy S)ynth-mode, N)ewscreen, B)andpass, U)ltra and M)idi
  160. modes and a few other time consuming operations in the D)oodle mode. The
  161. space bar also shuts off the internal audio in case of neighbor's
  162. complaints.
  163.  
  164. For certain operations, when the operation is finished, you will be put in
  165. Play Mode , since it is the safest mode to be in. 
  166.  
  167. Real time (graphic) toggle:
  168.  
  169. The letter G toggles on and off the "graphic synthesis", i.e. the real
  170. time synthesis mode. This is also available in the process menu.
  171.  When G is off, RGS acts a lot like an odd paint program. To get the sound
  172. corresponding to your image, you'll need to use X)one or S)ynth modes.
  173. When G) is on, all D)oodles  are simultaneously synthesized, pixel by
  174. pixel. Also, the pan and period information (as under Play mode) is
  175. captured and held constant while you draw. There are four synthesis
  176. modes(!) which are gotten to by the non-keypad numerals 0,1,2, and 3.
  177.  
  178.   "0" means the entire sample is played in a loop (but Zoned synthesis is
  179. played in its own loop which is the size of the Zone) .
  180.  
  181.  "1" splits the screen into left and right halves (conveniently divided if
  182. you do a T)op mode), each panned and tuned as with G)'s mode 0. The two
  183. halves play in synch.
  184.  
  185.  "2" again plays the whole sample, but one channel is made slightly faster
  186. than the other. This causes some groovy phasing effects and chorusing,
  187. beating, etc. etc.
  188.  
  189.   "3" acts like "0" except that zoned synthesis does not affect  the  size
  190. of the sample being played. This lets you draw an interesting spectrum and
  191. zone-synth sections of the screen , which are instantly mixed into the
  192. sample.
  193.  
  194.  Some things don't work very well with the real time "G"  mode. For
  195. example, Inc and Dec won't have much effect unless the "prop gadget" is
  196. set above 16. This is due to the trick I use to do the synthesis, which is
  197. to take the difference between the existing amp and the new amp and add
  198. the (scaled) resulting sine to the sample. Trouble is, the scaling chops
  199. out lots of subtle changes. (If I go to a 16-bit sample, this will go
  200. away). Real-time also overloads faster, and is less accurate in general,
  201. since I refuse to sum the entire row, scale and replace it as theory
  202. demands. However, for many complicated sounds (or compositions, if you
  203. wish) it works well. The biggest kick is drawing something, then erasing
  204. parts of it and hearing that harmonic drop out of the mix!
  205.    You can improve the fidelity (at the cost of getting closer to clipped
  206. levels) by using the  "+" key to make new synthesis louder ("-" to make it
  207. softer). Doing this also improves the response of the Inc and Dec
  208. functions.
  209.  
  210.  Top mode:
  211.  
  212.   T)op Clears the screen to grey ( amplitude 0), then goes directly to    
  213.   D)oodle mode. It also wipes out the sound sample buffer. You can also
  214.   use the letter K to do this. 
  215.  
  216.  
  217.  Doodle Mode:
  218.  
  219.  D)oodle mode is the main drawing mode. It works with the Left and Right
  220. menus to allow the sonogram to be drawn and processed.  You set the
  221. drawing functions of the left and right buttons by selecting the function
  222. from the  appropriate menu.  When you draw, you use either button to get
  223. either of the two drawing functions. The active function is shown as a
  224. user-unfriendly 4 letter  mnemonic. While you draw, the phase number and
  225. the byte offset are continuously updated.
  226.  
  227. Normally, the drawing goes on where ever the "Pen" is pointing, but
  228. you can grid-lock the drawing position by using the keypad buttons. 
  229. "8" increases the frequency lock interval, while "2" decreases it.
  230. (Technically, it constrains the Y-value, and not the phase/frequency).
  231. Frequency locking is useful for constant-toned sounds without harmonic
  232. movement. "4" and "6" do the same for time locking. You can make nifty
  233.  rhythms with this feature by using "Blob" or "CpBl". "5" resets the
  234. grid to 1,1. These locks are nicely reported below the drawing area.
  235. The top constraint is 64 in both cases.
  236.  
  237. The left and right arrows can be used to increment or decrement the
  238. drawing amplitude (color) by 1, which is good for fine tuning the
  239. amplitude for a -cut operation. Also, the comma button may be used to
  240. "pick" the color beneath the pointer (as in a certain famous paint
  241. program).
  242.  
  243. Also Also, the + and - buttons control the scale factor (Volume)  for 
  244. the synthesis section. This is a number which the sum of all the
  245. samples per time period is divided by. The smaller this number, the
  246. louder the sample, and the greater the chance that it will overload
  247. and need to be clipped. However, fidelity is improved by making this a
  248. low number. 
  249.  
  250. The up and down arrows control the Harmonic Handle, which is posted above
  251. the grid numbers .. read on for more about its uses.
  252.  
  253. The Doodle mode actions are grouped in a nearly logical fashion.
  254.  
  255. Dos and Lines:
  256.  
  257.  Dot  A dot of the selected color is continuously dropped on
  258.         the screen  while the left mouse button is depressed.
  259.  
  260.  Line A continuous line is drawn while the button is down. Note that
  261.         the line cannot be drawn from right to left.. to encourage
  262.         'proper temporal flow'.
  263.  
  264.  CycL Does a ramp-like colored line, speed of cycle is based
  265.          on the Prop value.
  266.  
  267. Blobs:
  268.  
  269.  Blob The Blob of Blob box fame is deposited. (You can resize the blob
  270.         by clicking in the blob box.)
  271.  
  272.  Wipe A Blob-sized Eraser, suitable for putting on the "other" button.
  273.  
  274.  CycB Draws a Blob  while changing the colors, speed is based on
  275.          the prop value.
  276.  
  277. Ramps:
  278.  
  279.  Ramp A line at this frequency is 'ramped' up to the selected color,
  280.         then back down again. A ramp is always summed into the current
  281.         screen background. The rate at which the ramp ramps is
  282.         controlled by the phony prop gadget.(Low number == long, slow
  283.         ramp).
  284.  
  285.  R-Dn Ramps down from the color under the pointer, using the rate from
  286.         the prop gadget.
  287.  
  288.  R-Up Ramps up (backwards) from the pointer position, like ramp down.
  289.  
  290. Fill operations:
  291.  
  292.  Fill Fills this frequency with this color, until it hits a color
  293.          differing from that under the pointer.
  294.  
  295.  Fil2 Does a ramp-fill up to the pointed-to color from the colors
  296.          at the edges. Close relative of FilC and Mow. Works well
  297.          as a fancy Fill.
  298.  
  299.  FilC Fills like Fil2, except the 'peak' color is the current color,
  300.          not the replaced color.Great for doodling sounds.This will work
  301.          on grey areas as well, making little spots of color.
  302.  
  303.  Mow  Fills like Fil2, but ignores 'peaking', just ramps from 
  304.          left color to right color.( Doesn't work on grey areas).
  305.  
  306.  
  307.  
  308. Harmonic operations:
  309.  Harm   A dot in the suitable color and rate is summed into the screen
  310.         at harmonics determined by the current Frequency space settings.
  311.         The Pointer represents the harmonic specified by the Harmonic
  312.         Handle (controlled by Up and Down Arrows). It only writes forward, 
  313.         and connects points continuously. Harm can be used to create a
  314.         harmonic framework for subsequent  alterations, using color #1 as
  315.         the base color. If you are stuck generating  a long, ugly harmonic, 
  316.         hit space bar. The yellow line which pops up is a guide which
  317.         shows the end of this harmonic line's segment (i.e. how much
  318.         more it has to do before it reads the mouse again).
  319.  
  320.  
  321.  Xcld Excludes all but harmonics near this time period. The pointer
  322.          is on the Harmonic Handle (adjustable with the up and down
  323.          arrows). Xcld is good for cleaning up Bandpass filtered spectra. 
  324.          Space stops the process as with Harm. If you Xclude on top
  325.          of a Harmonic spectrum, you get comb-filter-esque effects.
  326.  
  327.  
  328.  Frmt Draws a portion of the harmonic spectrum (i.e. formant) specified
  329.         by the setting of the Harmonic Handle, and the prop gadget
  330.         value. Not as nice as I had hoped.
  331.           
  332. Averaging and filtering:
  333.  
  334.  Avg  Averages a Blob-sized area around the pointer, then averages the 
  335.         average with the non-0 colors within that area. Note: use skinny 
  336.         horizontal Blob for best results.
  337.  
  338.  Filt Averages (within the pointed-to  blob area) the colors with the 
  339.         next colors in the same frequency. Blends disparate colors. 
  340.       The formula is the phase-conserving s=( S(i-1)+2*S(i)+s(I+1)+2 )/4  
  341.  
  342. Increment and decrement:
  343.  
  344.  Inc Adds "Prop gadget amount" to the spot under the pointer.
  345.          Length is Blob's length. 
  346.  
  347.  Dec Decrements this spot by the prog gadget amount.
  348.          Length is Blob's length.
  349.  
  350.  Inc0 Increments if there is a non-0 color in the Blob
  351.          shaped area under the pointer. For making soft areas louder. 
  352.  
  353.  Dec0 Decrement, but not all the way down to 0.(Like Inc0). Because
  354.          the shape is not erased, it's easy to change amplitudes of
  355.          formants using Inc0 and Dec0. 
  356.  
  357. Copy operations:
  358.  
  359.  From sets the 'from' point for  Copy and CpBl.
  360.          You must click the left button.
  361.  
  362.  To   sets the 'to' spot for a Copy.
  363.  
  364.  Copy Copies 'pantograph'-style for those of you who remember Images,
  365.          based on the 'from area' going to the 'to' area. (area is
  366.          Blob sized). Also, no 0 levels are copied. 
  367.  CpZn Copies the current Zone to where the pointer is. The pointer 
  368.          indicates the upper left corner. (see Zone Mode)
  369.  
  370.  CpBl Copies a blob shaped area from "From" to the pointer,
  371.          ignoring "0 levels". Nice to stick "from" on the other button
  372.          and fly around, moving stuff. 
  373.  
  374. Processes:
  375.  In former versions of RGS, some of these "overall" processes were
  376. assigned to drawing tools. This seems inappropriate. So a new menu holding
  377. these processes has been made. Synth Zone and Xsynth have also been moved
  378. here, and may be dropped from the modes menu in the future. 
  379.  
  380.  -Cut removes all amplitudes quieter than the current one from the 
  381.          sonogram. Nice for cleaning BPFs. You must click the left
  382.          button on the main drawing screen. You can stop the
  383.          process with the space bar. 
  384.  
  385.  Norm    tries to maximize the final sample's  signal to noise ratio
  386.          by finding the 'loudest' column and rescaling all the amplitudes
  387.          to make that loudest volume be just below clipping (at the 
  388.          current Volume level). DANGER: with 'high' volumes this
  389.          tends to 'green' up everything if your sample is not too loud.
  390.          This works best if you are trying to tone down a clipping 
  391.          sound. (You could also re synthesize at a 'higher' Volume
  392.          number.)
  393.  
  394.  Life performs an automaton-like transformation of the sound in
  395.          the current Zone. I change the algorithm a lot, but it
  396.          has something to do with the average of the amplitudes
  397.          at certain just intervals from the current one. You must
  398.          click on the drawing area to activate it. Hitting space bar
  399.          will stop the process. Since it generally lowers amplitudes,
  400.          stick "Inc0" on the other button to pep it up. 
  401.  
  402. Zone,Synth and X-Synth are covered as modes.
  403.  
  404. The Real-time synthesis switch is also here (G).
  405.  
  406. The Palette switch is also also here. (\) You get either 'Rainbow' or
  407. 'Orange Spread'. Rainbow is good for discerning the levels, while
  408. Orange Spread looks a whole lot better.
  409.  
  410. The Period lock switch is also also here. (~) this locks the period number
  411. to whichever is in effect so you can change modes without accidentally
  412. resetting the period.
  413.  
  414. A)lternate Buffer Mode:
  415. Buffers:
  416.  
  417. To allow primative undos and 'A/B'ing, I now have two buffers, named 
  418. BufA and BufB. You can swap them with the 'A' key, or the A/B menu item.
  419. The swap is instantaneous, but the screen must regen with the new
  420. information. If there's nothing in the other buffer, or you are going to
  421. do something which regens the screen anyway, just hit the space bar. 
  422.  
  423. One more trick involving A/B is only available from the menu:
  424. you can copy a 'zone area' from the 'other' screen to this one. For
  425. example, you can keep a copy of a spectrogram in 'B' and work on
  426. pieces of it in 'A', splicing etc. etc. Impress your friends:
  427. draw a sonogram in BufA, swap to empty BufB, Zone the entire space,
  428. turn on the Real-time synth, and select copy A/B. The sound in the other
  429. buffer will be generated from the high frequencies down as it copies!
  430.  
  431.  
  432.  Zone Mode:
  433.  
  434.  This mode sets up a "Zone" which operates with the "Life" function
  435. and also with the XoneSynth funtion and CpZn. Click on one corner of the 
  436. area of interest, draw out the rectangular Zone and release. You
  437. are now in Doodle Mode.
  438.   You can also rescale the color-to-amplitude mapping by clicking 
  439. first on the new "low limit" in the color bar, and then dragging
  440. to the higher limit. All new drawing will be using that palette.
  441. You may  recreate the screen in the new mapping, using the
  442. N)ewScreen mode or erase the screen with T)op Mode.
  443.  
  444.  Newscreen Mode:
  445. This mode erases the screen and redraws the spectrum in the new colors.
  446. This allows you to see spectral details which may be too subtle
  447. to show up otherwise. For example, the B)andpass filter creates a very
  448. accurate analysis, so you can  zoom in on those low amplitude levels.
  449.  
  450.  Synth Mode:
  451.  
  452.  S)ynth erases the sound area and then creates the waveform by additive
  453. synthesis. You may cut the sound short by hitting the space bar to go
  454. directly to play mode. This mode  may be slow at times, but it depends on
  455. the current sample/pixel settings. All grey areas are skipped (their
  456. amplitude is zero) so thinly populated sonograms generate faster.
  457. Technicians will note that I am using fixed point arithmetic and a  custom
  458. sine-lookup table to make this calculation, which is merely the scaled sum
  459. of the (scaled) amplitudes at each frequency times the properly phased
  460. sine at that frequency. Simple, eh? The real-time synth's method is to add
  461. a single frequency's properly phased sine wave to the existing sample,
  462. which means that  numerous low-order bits must be  discarded, resulting in
  463. poorer quality.
  464.  
  465.  X)onesynth Mode:
  466.  
  467. This is merely a mode where the synthesis is confined to the zoned area:
  468. (see Zone Mode). This is the ultimate bandpass filter!. It loops only the
  469. synthesized portion , just like Synth, unless you are using 'synth mode
  470. #3', which is designed not to for precisely this reason .
  471.  
  472.  
  473.  Play Mode:
  474.  
  475.  P)lay plays the sound area. Moving the mouse vertically changes the Amiga
  476. 'period' (i.e. frequency.) The range of periods can be changed by the up
  477. and down arrow keys (up decreases period range, down increases it). "So,
  478. how long can that sample be, in seconds?" The longest sample RGS generates
  479. is 270*256 bytes = 69120. The new highest period is 6348 (which 
  480. corresponds to a sample rate of 563.88 Hz). 69120 samples at 563.88 Hz is
  481. about 2 minutes and 3 seconds. Keep the frequencies low and you've got a
  482. Top 40 hit!!!. 
  483.  
  484. The following modes require some names and numbers from the keyboard.
  485. I hope to eliminate this primative stuff soon. There are some hints in
  486. these windows as to what the numbers should be , but no 'Cancel' buttons.
  487. Sorry - when they become requesters, they'll be more fun.
  488.  
  489.  Reset Mode:
  490.  
  491. R)eset resets the frequency and time spaces. The maximum total number of
  492. 8-bit samples RGS can work with is 69120 (270 * 256). It flips to the
  493. workbench input console window. The first number is the number of samples
  494. each pixel on the x-axis represents (1-256). You then input the wavelength
  495. of the top frequency line in units of one hundred cycles per sample. This
  496. corresponds to the little phase  number on the screen during Doodle mode
  497. times 100. This is the sign of a lazy slob who didn't want to parse a
  498. decimal point. Thus, for 2 samples per cycle, say 200, for 4, say 400. A
  499. similar wavelength is asked for which corresponds to the lowest harmonic.
  500. I treat 0 as infinity, otherwise it should be a larger number then the
  501. upper limit: longer wavelengths mean lower frequencies. Equivalent  Hz
  502. values are displayed  after these numbers are input (assuming a period of
  503. 238 which corresponds to a sample frequency of 15040 KHz). 
  504.  
  505.  Finally, the MIDI Level is asked for, which is the maximum number of MIDI
  506. note events the MIDI modes should transmit. DX7s can have 16, while
  507. TX81Zs can only handle 8. Setting this to a low number in Ultra mode may
  508. overload your synth's MIDI buffer and cause you to lose your lease.
  509.  The screen will flip back after a second allowed for you to digest this
  510. info. The number of Samples/horizonal pixel is available for your
  511. perusal on the  screen. 
  512.  
  513. These settings apply to both buffers, but may not in the future.
  514.  
  515.  
  516. Write Mode:
  517.  
  518. W)rite writes the sound area to an IFF 8SVX sample file, for use by such
  519. programs as may use IFF samples. A filename is prompted for, the
  520. instrument name, your favorite "Period" number for tuning purposes - you
  521. can use 0 to mean the one used now in play mode -  and a number of octaves
  522. (which merely decimates the sample). Remember: it's best to keep IFF files
  523. short since a lot of programs can't handle  more than 24K. RGS can make a
  524. 64K sample, and therefore a 128K IFF file!  It's a good idea to give the
  525. IFF file a suffix which your playback program  expects, so I don't put one
  526. on.
  527.  
  528. Bandpass Mode:
  529.  
  530. B)andpass is the heterodyne filter. A name of a sound file is prompted
  531. for, then a starting offset within the file (so you may skip to an
  532. interesting section). The end offset for the file is prompted for, and 
  533. the sample size is computed from these two numbers. You can enter 0 to
  534. mean the end of the file. The frequency limits are next, exactly as they
  535. are in Reset mode. The record 'K' is asked for, which is the record size
  536. log to base 2 (i.e. 5=32, 10=1024 ...) Under 7 is pretty speedy, but
  537. decent usable work appears at about 9 or 10. Lastly, the phase and sample
  538. skip numbers are prompted for: this lets you scoot over the sample to get
  539. an overview before commiting yourself to an 8-hour bandpass analysis. You
  540. may stop the process by hitting the space bar.
  541.  This is not  an FFT because it is more geared  to the parametric nature
  542. of the program. Technically, it is a sonogram where color represents
  543. amplitude. Again, it uses fixed point arithmetic. No hokey suffix is
  544. required for this sound data file, and in fact,  any format soundfile
  545. (except compressed or inverted-byte) will be read, since I ignore the
  546. fileheaders! RGS has a more accurate Bandpass filter than DRWj, because
  547. RGS can hold a wider and more complete range of amplitudes. The quality of
  548. the filter results is dependent on the ratio of the record length to 2^K .
  549. Obviously, trying to analyze a wave longer than 1 record is futile. On the
  550. other hand, detail is lost if the record covers too many cycles. In
  551. theory, I shouldn't even attempt to analyze sounds with wavelengths
  552. greater than half the sampling frequency, but eh! sometimes interesting
  553. stuff shows up in there.
  554.  
  555.  "You canna change the laws o'physics!" - Mr. Scott.
  556.  
  557. A sneaky way to audition a sample that you may want to analyze is to  read
  558. it with Bandpass mode, give it a low "K" and hit the space bar when it
  559. starts. "Play" mode will let you play it now. In fact, you can write on it
  560. in  G) mode, thus combining high-quality samples with low quality
  561. synthesis! In double fact, you can go directly to W)ritemode and turn it
  562. into an IFF sound!
  563.  
  564.  
  565. FFTMode  is in the works .... commented out until I figure out what's
  566. wrong with it. It should make some kinds of analysis quicker.  
  567.  
  568.  
  569. O)utput  writes the sonogram to a disk file.  I)nput  reads it from  a
  570. disk file.  The R)eset parameters are also saved. I generally give these
  571. files a .RGS  suffix, to distinguish them from sample and IFF files. No
  572. suffix is automatically appended, though. RGS outputs a more accurate file
  573. than DRWj, even though it is the same size (73728 bytes). Future:
  574. compression. The official name of this new expanded format is the Poop
  575. format. I can read older formats from DRW and DRWj , RGSI, RGSH and other
  576. variants of the program with I)nput mode. This is why I prompt for
  577. "Compress or Corner" . Corner gives the lower left corner of the sample
  578. (in case the file is bigger than the screen). Compress will take a larger
  579. file and skip rows and columns until it fits on the screen. The period and
  580. phase numbers are adjusted to  take the compression into account.
  581.  
  582.  
  583.   MIDI Mode:
  584.  
  585. MIDI mode first runs through each line and picks the loudest "MIDILevel"
  586. amplitudes at all horizontal times. Then, you enter a performance mode
  587. where RGS sends up to 16 notes to the synthesizer, based on which record
  588. the mouse points at and the MIDI Level parm (see R)eset). Color becomes
  589. velocity (0-99). Holding the left button down increments the sample
  590. pointer at a steady pace. The time between transmissions depends on the
  591. "y" co-ordinate of the mouse. Note! the screen is re-written to show you
  592. who the winning frequencies  are, but the actual data is unchanged. After
  593. doing a MidiMode, you may want to  regen the screen (N).
  594.  
  595.  Even though I use "running status", your synth may  block up. If you have
  596. a microtonal synth which can be programmed to a pure scale of harmonics
  597. for all 128 notes with 16-note polyphony, you can get the synth to
  598. simulate the same harmonic space that RGS provides (although only an 8th
  599. as powerful). I have done this on  a Dx7/E!gen.2 and a TX81Z. You should
  600. (canonically) use a linear velocity sensitive sinewave as the patch to
  601. play. Obviously, other patches and scales cause other effects.
  602. Whoop-de-doo! With the aid of the BPF function and some good samples, the
  603. DX can talk!
  604.  
  605. U)ltraMIDI
  606.  
  607. This MIDI play algorithm doesn't do any preprocessing, it just takes  the
  608. pointed-to time slice, finds the harmonics (based on the  harmonic handle)
  609. and outputs up to 16 to MIDI. In short, the screen is a formant guide.
  610. Holding the mouse button down sends an advancing MIDI stream to the synth.
  611. This is like an swarm of MIDI bees. Little dots show up in your picture to
  612. show you where the MIDI notes came from.
  613.  
  614. In both of these MIDI Modes, the F Keys send certain useful real-time MIDI
  615. messages, incrementing or decrementing the number (mod 128 of course):
  616.  
  617.  -    +
  618. --------
  619.  F1 - F2 :  Patch numbers
  620.  F3 - F4 :  Pitch Bend
  621.  F5 - F6 :  Controller number (default:1=mod wheel, 2=BC, 3=DX AT, 7=VOL)
  622.  F7 - F8 :  Controller value  ( default: 0)
  623.  F9 - F10:  After Touch
  624.  
  625. also, Escape sends All Notes Off and resets the control parameters 
  626. without retransmitting them. Just toggle the Fkeys of the controls
  627. you wish to reset. 
  628.  
  629. The MIDI Channel can be incremented with the Delete key. 
  630.  
  631. All the MIDI parameters are displayed below the draw space in this order:
  632.  
  633. Limit, Channel, Program, Pitchbend, Aftertouch, Control # , Control value.
  634.  
  635. Note that swapping channels may leave notes ringing, and if the machine
  636. doesn't respond to "ALL NOTES OFF," you are in BIG NOISY trouble. Why not
  637. leave a little blank space to park the mouse while you change the channel? 
  638.  
  639. Quit Mode:
  640.  
  641. Q)uit gives you a chance to play Marble Madness or F-18 Interceptor.
  642. Maybe one day, I'll even ask if you really wanted to quit!
  643.  
  644. The Future:
  645.  RGS is an obvious relative of my other programs DRWj and DRW. It is
  646. written in Delta Research's Jforth. The new Cloner/compressor will make
  647. future versions easier to put out. It works great... much better and
  648. easier than I had feared. This is why the program is less than 75K long!
  649. Immediate improvements will be the elimination of the workbench
  650. questions, perhaps a real file requester (gasp!) and some way to specify
  651. frequency/ time limits with the mouse and not a calculator. I may also
  652. put a real FFT in , just to see if there's a big accuracy difference.
  653. I've been thinking of translating the spectrogram into a MIDIFile, for
  654. the purpose of uploading to a score writing program, in case someone
  655. wants to make an orchestra talk. Also, the I)nput mode may read IFF ILBM
  656. files (pictures to you) to answer stupids questions like, "what does it
  657. sound like when you load this picture in?"
  658.  
  659. The next related  step, if any, will probably be a vector based system
  660. written in assembler. It should also have sound double-buffering and
  661. Bigger than the screen bitmaps and perhaps 16-bit sound (calculated,
  662. anyway). There will  need to be a way to store samples larger than
  663. floppies and play samples larger than memory holds (!). If prodded, I will
  664. make the "IFF 8SVX to Mirage" transporter program, since I have a Mirage
  665. rackmount synth to test it on.
  666.  
  667.  
  668.  
  669.  
  670. Ye Olde Copyright Notice:
  671.  
  672. This is MINE ALL MINE HA HA AHA AH AHA HAHAHAHAHAHAHAHA!!
  673.  
  674. Remember: Software kills! Use this tool wisely!
  675.  
  676. Like most shareware, you are free to copy this as long as you don't charge
  677. for the copies that you give away. As a matter of fact, I tell people that
  678. they MUST copy the program if they wish to be a fully licenced user
  679. (whatever that may be.) In lieu of money, which I'm not interested in,
  680. consider calling your local educational institutes and show their music
  681. department this program. You are free to include this program in your
  682. thesis bibliography. 
  683.  If you use this program in performance (and some of the modes are now
  684. quite suitable for it) I would like to hear about it. If you are a 
  685. developer making your own Amiga music program and would like to steal some
  686. of my ideas - I stole 'em first! but call me, and you can steal some more.
  687. Part of the idea is to make sure that commercial programs similar to this
  688. are a lot more powerful and friendly.
  689.  I am in no way associated with Intelligent Music - don't expect them to
  690. answer any questions about this program. I'm just taking up their generous
  691. offer to piggyback RGS on the M Sound/Extras disk. You may want to use RGS
  692. to make 8SVX samples for M to play. I suggest you go for all 5 octaves.
  693. M also likes to have an .info file for the samples with "FILETYPE=8SVX"
  694.  in it, which RGS does not provide. Use the "see all filenames"
  695. option to find an RGS sound, or copy an existing .info file. These samples
  696. are also useful in any other 8SVX IFF Music program.
  697.  
  698.  I am after activism as a shareware concept. Money I don't need. And, it
  699. won't buy you a single thing.. there are no guarantees implied in this or
  700. any software. Neither can I say when or if the improved versions will
  701. appear.  If you send a kitchy postcard to me with your name and address,
  702. the chance that you will be informed of improvements to RGS will increase.
  703. For your information, I collect "C.T. Art - Colortone" sunsets and beach
  704. scenes  from previous decades. 
  705.  
  706.  You can get to me here:
  707.  
  708.           J Henry H Lowengard
  709.           43 W 16th st. apt 2D
  710.           NYC 10011-6320
  711.           also via IEMUG's MIDI boards:(MIDI-NET)
  712.           ENIAC (212) 751-2347, IEMUG (405) 733-3102
  713.           and CompuServe: 76625,2425
  714. Nov 23 1988
  715.  
  716.         Tips and Tricks - impress your friends, mystify your enemies
  717.  
  718. RGS.doc has a few tricks mentioned it it, but I thought I'd give a few
  719. more as a tutorial.
  720.  
  721. Educational Division:
  722.  
  723. One of the things which is a little hard to understand about RGS is the
  724. phase or frequency axis. What exactly is this, and what are those numbers?
  725. RGS works by summing sine waves together. Sinewaves repeat themselves
  726. endlessly. The number of complete cycles which occur in a second is the
  727. frequency of the sinewave, measured in Cyles/Second or Hertz (Hz). If you
  728. use digital synthesis to make a sinewave, you must approximate the  true
  729. shape of the wave with little stair-steps. When the frequency is high, the
  730. number of sinewaves per second is also high. Since a sample is a fixed
  731. length, the wavelength of the sinewave must correspondingly decrease.
  732. Clearly, you cannot have a representation of a wave which  has a wavelength
  733. less than 1 sample long. As a matter of fact, you should have at least two
  734. samples per wave-cycle if you hope to have even the least  accurate sine
  735. representation. So, the little number with the decimal point in D)oodle mode
  736. is the number of samples needed to represent one wave-cycle. It usually
  737. increases toward the bottom of the screen geometrically. The is because
  738. lower sounds have longer wavelengths. How is it possible to have fractional
  739. samples/cycle? Because I precisely line each sinewave up after the previous
  740. on on its left, on the average the number of samples will be fractional. In
  741. the long run, it will sound correctly. Remember that each spot on the screen
  742. represents several samples (up to 256). The reason this number is multiplied
  743. by 100 in the R)eset and B)PF mode dialogs is merely laziness.
  744. There is no number corresponding to frequency: The frequency of the sound
  745. will change when the Amiga  Period changes. The Amiga period is  a number
  746. which governs the delay between the playing of successive samples, and
  747. runs from 124 up. The time represented by one of these delay units (color
  748. clocks) is 0.279365 microseconds. 
  749.  
  750.  
  751. About IFF 8SVX files. 
  752.  
  753. The IFF 8SVX sound file format is documented in the Rom Kernal Guide:Exec
  754. volume. Each sound has a name, some idea of its tuning, and a number
  755. of octaves of different samples. The reason separate octaves are used
  756. is that the normal way of playing samples on an Amiga involves playing
  757. with the Amiga preiod number. While it is best for fidelity to have a long
  758. sample played at a high speed, high notes bump into that 124 color clock 
  759. limit. So, at some sacrifice in fidelity , a sample half as long is used,
  760. with the sound of the lower octave sped up. RGS places the sample you
  761. hear in play mode as the lowest octave (most accurate). The higher octaves
  762. are derived from this high-quality sample by choosing every other sample
  763. in the lower octave. This is, strictly speaking, inaccurate (the average
  764. should really be done, at least. True frequency changing involves much
  765. more complex mathematics). However, it's usually OK.
  766.  
  767.  
  768. Neat Stuff Department:
  769.  
  770. Set the harmonic space to 400,0 (4 sample on the top line).
  771. Draw a spectrogram in buffer A and synthesize it. Flip to Buffer B
  772. with the A key. Draw the 'top octave' of the spectrum in the usual way,
  773. resetting the space to 200,400. Flip back to the A buffer. Zone the
  774. entire screen. Turn on the Real time synthesis. Do Copy Zone A/B. It will
  775. mix the new synthesis into the existing sound, adding the top octave to
  776. the sound! Future versions of RGS may have similar mixing and harmonic
  777. appendage tricks built in. This works best if you work with the volume
  778. set to '1' (highest). Make sure not to overload!
  779.  
  780. Rhythm effects can be done by making skinny Blobs and laying them down
  781. while the time is grid-locked (the keypad 4 and 6 keys). Use the
  782. Filt mode to ramp up to a beat, or use ramp up or down. Throw some
  783. Ramps on top of this mess - if you lock the frequencies you can make a quick
  784. Buzz on the beat.
  785.  
  786. Develop a spectrogram, but leave a frequency band clear across the whole
  787. sample. Zone this empty band. Find a nice Amiga period (Play mode) and lock
  788. it with  the ~ key.  Set sample mode 3 (real 3 key). X)ynth the zone, 
  789. clearing the sound, but stay in Real-time synth mode. Now , stick your
  790. fingers on the x and y keys. Use Z to zone a block of spectrum. Use X
  791. to synthesize it. Repeat endlessly. I restart the playback after Xynthing,
  792. but otherwise, you can mix in bands of various hoo-hah in realtime.
  793.  
  794. Time lock to 2 or 3 (hit keypad 6 once or twice). Using a tiny Blob
  795. or Dot, sprinkle dotty lines on the screen. Nice, ratchety sound, eh?
  796. Sounds vocal almost. Blur the dots with Filt. If you like, gridlock
  797. the frequencies as well. Or use Formant.
  798.  
  799. Using a big blob, with the synthesis off, Make a colorful mess on the
  800. screen. Use FilC and Filt to smooth the colors out. Select Xclude and
  801. carve a harmonic staff through the mess. Filter to taste. Go to UltraMidi
  802. and wake the neighbors.
  803.  
  804. Bandpassfilter a sample with a voice and accompaniment. Make it Accurate
  805. (K=10). Save the  spectrogram - it took forever to do didn't it? Now
  806. copy it to the other buffer as insurance. Look at the harmonic lines
  807. in the voice's spectrum - they should be distinguished from the
  808. accompaniment. Find the highest continuous harmonic in the voice you can.
  809. (If not strictly continuous, it's OK) . Reset the Harmonic handle to 
  810. this harmonic's number (Up and Down Arrows). Use xclud to carve the 
  811. voice out of the background by following the selected harmonic with the
  812. pointer. You can fix mistakes by zoning and using Copy zone A/B (see
  813. why you saved it to the other buffer?) Now synthesize. Voice should be 
  814. isolated.
  815.  
  816.